﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Analysis.Business;

namespace Analysis
{
    public partial class frmFarkBilgi : XtraForm
    {
        Dictionary<int, string> faturalar = new Dictionary<int, string>();

        public string Aciklama { get; set; }

        public void EvrakEkle(int recNo, string cariKod)
        {
            if (!faturalar.ContainsKey(recNo))
            {
                faturalar.Add(recNo, cariKod);
            }
        }

        public frmFarkBilgi()
        {
            InitializeComponent();
            txtSira.GotFocus += new EventHandler(txtSira_GotFocus);
        }

        void txtSira_GotFocus(object sender, EventArgs e)
        {
            txtSira.Text = new dbMikro().MaxSira(txtSeri.Text).ToString();
        }

        private void frmFarkBilgi_Load(object sender, EventArgs e)
        {
            dteTarih.DateTime = DateTime.Now;
            if (Config.GetConfig.GetValue(Parametre.faturaDetayli, "Hayır") == "Evet")
            {
                checkEdit1.Checked = true;
            }
            this.txtAciklama.Text = this.Aciklama;
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            FaturaKes();
            prgBar.Visible = false;
            MessageBox.Show("İşlem Tamamlandı !");
            this.Close();
        }

        private void FaturaKes()
        {
            prgBar.Visible = true;
            Dictionary<string, string> evraklar = new Dictionary<string, string>();
            if (chkAyniCari.Checked)
            {
                foreach (int key in faturalar.Keys)
                {
                    if (evraklar.ContainsKey(faturalar[key]))
                        evraklar[faturalar[key]] += key.ToString() + ",";
                    else
                    {
                        evraklar.Add(faturalar[key], key.ToString() + ",");
                    }
                }
            }
            else
            {
                foreach (int key in faturalar.Keys)
                {
                    evraklar.Add(key.ToString(), key.ToString() + ",");
                }
            }

            dbMikro mik = new dbMikro();
            int sira = int.Parse(txtSira.Text);
            int idx = 0;
            Dictionary<string, string> bilgiler = new Dictionary<string, string>();

            foreach (string item in evraklar.Values)
            {
                if (!chkAyniCari.Checked)
                {
                    string belgeNo = "";
                    try
                    {
                        belgeNo = txtAciklama.Text.Split(',')[idx];
                    }
                    catch (Exception)
                    {
                    }
                    mik.FaturaKes(item.Remove(item.Length - 1, 1), txtSeri.Text, sira, new DateTime(dteTarih.DateTime.Year, dteTarih.DateTime.Month, dteTarih.DateTime.Day), txtBelgeNo.Text, belgeNo);
                    bilgiler.Add(item.Remove(item.Length - 1, 1), string.Format("{0};{1}", txtSeri.Text, sira));
                    idx++;
                }
                else
                {
                    mik.FaturaKes(item.Remove(item.Length - 1, 1), txtSeri.Text, sira, new DateTime(dteTarih.DateTime.Year, dteTarih.DateTime.Month, dteTarih.DateTime.Day), txtBelgeNo.Text, txtAciklama.Text);
                    bilgiler.Add(item.Remove(item.Length - 1, 1), string.Format("{0};{1}", txtSeri.Text, sira));
                }
                sira = mik.MaxSira(txtSeri.Text);
            }

            foreach (int item in faturalar.Keys)
            {
                foreach (KeyValuePair<string, string> key in bilgiler)
                {
                    if (key.Key.IndexOf(item.ToString()) > -1)
                    {
                        string[] bilgi = key.Value.Split(';');
                        if (key.Key.IndexOf(',') > -1)
                        {
                            foreach (string r in key.Key.ToString().Split(','))
                            {
                                mik.FaturaStateChange(r, bilgi[0], int.Parse(bilgi[1]), dteTarih.DateTime);
                            }
                        }
                        else
                        {
                            mik.FaturaStateChange(key.Key, bilgi[0], int.Parse(bilgi[1]), dteTarih.DateTime);
                        }
                    }
                }
            }
        }

        private void txtSeri_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                txtSira.Focus();
        }

        private void txtSira_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                dteTarih.Focus();
        }

        private void dteTarih_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                txtBelgeNo.Focus();
        }

        private void txtBelgeNo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                txtAciklama.Focus();
        }
    }
}
